package com.rongshu.utils;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.TextUtils;
import android.util.Base64;
import android.util.Log;

import java.io.ByteArrayOutputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;

import static com.yalantis.ucrop.util.BitmapLoadUtils.calculateInSampleSize;

public class Common {

    private static final String tag = Common.class.getSimpleName();

    /**
     * HTTP请求主地址
     */
    public static final String TEST_HOST = "http://happytest.52rongshu.com:10012/";

    /**
     * pro
     */
    public static final String PRO_HOST = "http://happy.52rongshu.com:10000/";


    /**
     * 图片上传
     */
    public static final String BASE_FILE_HOST = "http://img.52rongshu.com:10014/";

    /**
     * md5加密的key
     */
    public static final String SIGN_KEY = "D98TZQWpTVlb1nqfkfO615U5ZEignoqW";

    /**
     * 用户协议
     */
    public static final String USER_AGREEMETN = "UserAgreement.html";

    /**
     * 隐私政策
     */
    public static final String PRIVACY_POLICY = "PrivacyPolicy.html";

    /**
     * 投稿须知
     */
    public static final String SUBMIT_ARTICLE_NOTICE = "InstructionsToAuthors.html";

    /**
     * 创作经验
     */
    public static final String CREATE_EXP = "CreativeExp.html";

    /**
     * 阅读经验
     */
    public static final String READER_EXP = "ReadingExp.html";

    /**
     * 充值说明
     */
    public static final String PAY_EXPLAIN = "PayExplain.html";

    /**
     * 微下载
     */
    public static final String TINY_DOWNLOAD = "https://a.app.qq.com/o/simple.jsp?pkgname=com.rongshu";

    /**
     * 关于我们
     */
    public static final String ABOUT_US =
            "我们，是一个新概念的全球中文原创作品分享社区。\n" +
                    "\n" +
                    "倡导每一个平凡人“生活感受随想”地诚挚记录。\n" +
                    "在这里，写作不仅是一种高尚的创作行为，更是回归真心的交流方式。\n" +
                    "因文字传达，更因文字领会。\n" +
                    "读者将通过阅读感受作者，抵达每个创作人热情恢弘的思想、观点和内心。\n" +
                    "\n" +
                    "“榕书”这个文学App是由20年前榕树下全球中文作品网的创始人朱威廉先生及其之前的榕树下初创团队共同打造的全球中文原创作品分享社区。\n" +
                    "\n" +
                    "若有倾诉，必有回响。\n" +
                    "温柔铿锵，皆是你文字冠冕的辉煌。\n" +
                    "\n" +
                    "人世喧嚣浮夸，物质风云翻滚汹涌，人们近物远人。\n" +
                    "人性越来越复杂，情感脆弱，意志动摇，惟心灵孤独依旧。只在每个人的内心深处留存等待，等一道懂得和理解的光。\n" +
                    "\n" +
                    "“榕书”从浮华世界脱影而出，应运而生这样一个“桃花源”，是为汇聚和你具有相同DNA的人。 \n" +
                    "放下身段，摘取面具，卸下缀累，以最简单直白的文字方式，展露内心，是为悉心描绘真善美的全景世界。\n" +
                    "\n" +
                    "同理相谋，是“理想”的“理”。那些为文字动容的人，最终也必然成为你的高山流水。\n" +
                    "以文会友，同道而聚，人们将回到文学与文字的初心，也回到对真情真意的珍重向往，联通相互间最本质的精神世界。\n" +
                    "\n" +
                    "面对一个日新月异的互联网世界，物质已经贯穿现实生活。我们希望这样一个纯文学交流的新时代网络社区，能不负众望，勇敢承担起引领回归、探寻生存意义和生命本源的社会责任――珍视生活，记取点滴，穿越浮躁，传递真情，抵达内心，守护宁静，携手成功，助力梦想……\n" +
                    "\n" +
                    "我们曾经与日夜星辰风雨相伴，悠悠时光，珍藏着多少昔日美好的记忆。今日，又将再次以崭新姿态，不变的文学梦想，焕醒荣耀，召唤所有心愿归属怅游已久的人文灵魂。\n" +
                    "\n" +
                    "在这里，你依旧能看到诗与远方，更能看到生活的意义，生命的澎湃。包括那些，你曾经忘却疏离，以为早已失落不见的情怀。\n" +
                    "\n" +
                    "所有一切，用文字见证。";


    /**
     * md5加密string方法
     *
     * @param string
     * @return
     */
    public static String md5(String string) {
        if (TextUtils.isEmpty(string)) {
            return "";
        }
        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("MD5");
            byte[] bytes = md5.digest(string.getBytes());
            String result = "";
            for (byte b : bytes) {
                String temp = Integer.toHexString(b & 0xff);
                if (temp.length() == 1) {
                    temp = "0" + temp;
                }
                result += temp;
            }
            return result;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 拼接sign字符串进行加密后的sign值
     */
    public static String encryptionSign(Map<String, Object> objectMap) {
        StringBuilder sb = new StringBuilder();
        sb.append(SIGN_KEY);
        if (objectMap == null) {
            return "";
        }
        //排序
        List<Map.Entry<String, Object>> infoIds = sort(objectMap);
        //循环遍历map集合
        for (Map.Entry<String, Object> entry : infoIds) {
            Log.i(tag, "key: " + entry.getKey() + "   " + "value: " + entry.getValue());
            sb.append(entry.getKey());
            sb.append(entry.getValue());
        }
        sb.append(SIGN_KEY);
        //进行md5加密
        return md5(sb.toString());//D98TZQWpTVlb1nqfkfO615U5ZEignoqWuser_id61pageIndex1pageSize10D98TZQWpTVlb1nqfkfO615U5ZEignoqW
    }

    /**
     * 将key值进行排序
     */
    private static List<Map.Entry<String, Object>> sort(Map<String, Object> map) {
        List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(map.entrySet());
        Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
            @Override
            public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
                return o1.getKey().compareTo(o2.getKey());
            }
        });
        return infoIds;
    }

    /**
     * 把bitmap转换成String
     *
     * @param filePath
     * @return
     */
    public static String bitmapToString(String filePath) {

        Bitmap bm = getSmallBitmap(filePath);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.JPEG, 40, baos);
        byte[] b = baos.toByteArray();

        return Base64.encodeToString(b, Base64.DEFAULT);

    }

    /**
     * 根据路径获得图片并压缩返回bitmap用于显示
     *
     * @return
     */
    public static Bitmap getSmallBitmap(String filePath) {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(filePath, options);

        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options, 480, 800);

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;

        return BitmapFactory.decodeFile(filePath, options);
    }

}
